#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <thread>
using std::cin;
using std::cout;
using std::endl;

using std::string;
using std::thread;
using std::vector;

// int main()
// {
//     vector<thread> vt;
//     int n = 10;
//     cin >> n;
//     vt.resize(n); // 默认创建的线程为空，为空也就是不执行
//     int i = 0;
//     int x = 0;         // 要放到外面
//     for (auto &t : vt) // C++库里面的线程不允许拷贝构造和拷贝赋值
//                        /// 只允许移动构造和移动赋值
//     {
//         t = thread([&i, x]() //创建匿名的线程对象（右值，将亡值），移动赋值给t
//                    {
//                        for (; i < 1000; ++i)
//                        {
//                            cout << "thread:" << x << "->" << i << endl;
//                        }
//                    });
//         ++x;
//     }
//     for (auto &t : vt)
//     {
//         t.join();
//     }
//     return 0;
// }

static int a = 100;

void Print1(int &x)
{
    for (; x < 100; ++x)
        cout << "进程1打印 ： " << x << endl;
}
void Print2(int &y)
{
    for (; y < 100; ++y)
        cout << "进程2打印 ： " << y << endl;
}
void test1()
{
    int i = 0;
    thread t1(Print1, std::ref(i));
    thread t2(Print2, std::ref(i));
    t1.join();
    t2.join();
}
void test2()
{
    int a = 0;
    int x = 0;
    vector<thread> v(10);
    for(auto& e : v)
    {
        e = thread
        (
            [&]()mutable ->void
            {
                for(;x<100;x++)
                {
                    cout << "进程" << a << "打印 ： " << x << endl;
                }
            }
        );
        ++a;
    }
    for (auto& t : v)
	{
		t.join();
	}
}
int main()
{
    // test1();
    test2();
    return 0;
}
